home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8434 / 8434.xpi / chrome / content / browserOverlay.js < prev    next >
Text File  |  2010-02-08  |  45KB  |  706 lines

  1. var googleredesignedBrowserOverlay = {
  2. MAIN_POPUPS:["googleredesigned-status-popup","googleredesigned-toolbar-popup","googleredesigned-tools-menu-popup","googleredesigned-prism-menu-popup","googleredesigned-seamonkey-tools-menu-popup"],
  3. addFile:function () {
  4.     openDialog("chrome://googleredesigned/content/edit.xul", googleredesignedCommon.getRandomDialogName("googleredesignedEdit"), googleredesignedCommon.editDialogOptions, {uri: content.document.location.href, code: content.document.childNodes[0].textContent, updateURL: content.document.location.href});
  5. },
  6. addSite:function () {
  7.     var url = content.location.href;
  8.     var code = "@namespace url(http://www.w3.org/1999/xhtml);\n\n@-moz-document url(\"" + url + "\") {\n\n}";
  9.     googleredesignedCommon.add(code);
  10. },
  11. appendStyleMenuItems:function (popup, styles) {
  12.     for (var i = 0; i < styles.length; i++) {
  13.         try {
  14.            popup.appendChild(googleredesignedBrowserOverlay.getApplicableStyleMenuItem(styles[i], i));
  15.         } catch (ex) {
  16.             Components.utils.reportError(ex);
  17.         }
  18.     }
  19. },
  20. autoupdateassignedcheck:function () {
  21.     var ds = new GoogleRedesignedRDFDataSource(googleredesignedBrowserOverlay.getConfigUri());
  22.     var te = ds.getNode("urn:googleredesigned:extension").getChildren();
  23.     while (te.hasMoreElements()) {
  24.         var extensionautoupdateassignednode = te.getNext();
  25.     }
  26.     return extensionautoupdateassignednode.getTarget("urn:googleredesigned#autoupdateassigned").getValue();
  27. },
  28. checkUpdateEvent:function (doc, style) {
  29.     var code = googleredesignedBrowserOverlay.getCodeFromPage(doc);
  30.     if (!googleredesignedCommon.cssAreEqual(style.originalCode, code)) {
  31.         googleredesignedCommon.dispatchEvent(doc, "styleCanBeUpdated");
  32.         doc.addEventListener("googleredesignedUpdate", googleredesignedBrowserOverlay.updateFromSite, false);
  33.     } else {
  34.         googleredesignedCommon.dispatchEvent(doc, "styleAlreadyInstalled");
  35.     }
  36. },
  37. cleanURI:function (uri) {
  38.     var hash = uri.indexOf("#");
  39.     if (hash > -1) {
  40.         uri = uri.substring(0, hash);
  41.     }
  42.     return uri;
  43. },
  44. clearStyleMenuItems:function (event) {
  45.     var popup = event.target;
  46.     for (var i = popup.childNodes.length - 1; i >= 0; i--) {
  47.         if (popup.childNodes[i].className == "style-menu-item" ||
  48.             popup.childNodes[i].className == "no-style-menu-item") {
  49.             popup.removeChild(popup.childNodes[i]);
  50.         }
  51.     }
  52. },
  53. findStyle:function (e) {
  54.     openUILinkIn(googleredesignedBrowserOverlay.URL_STRINGS.getFormattedString("googleredesignedSearchUrl", [encodeURIComponent(content.location.href)]), "tab");
  55. },
  56. getApplicableStyleMenuItem:function (style, position) {
  57.     var item = document.createElementNS(googleredesignedCommon.XULNS, "menuitem");
  58.     item.setAttribute("label", style.description);
  59.     item.setAttribute("type", "checkbox");
  60.     item.setAttribute("checked", style.enabled);
  61.     item.googleredesignedStyle = style;
  62.     item.setAttribute("oncommand", "googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)");
  63.     item.setAttribute("onclick", "googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)");
  64.     item.setAttribute("class", "style-menu-item");
  65.     if (position < 9) {
  66.         item.setAttribute("accesskey", position + 1);
  67.     }
  68.     return item;
  69. },
  70. getApplicableStyles:function () {
  71.     var resourceEnumerator = GoogleRedesignedStyle.prototype.ds.getNode(GoogleRedesignedStyle.prototype.containerURI).getChildren();
  72.     var applicableStyles = [];
  73.     var me = [];
  74.     while (resourceEnumerator.hasMoreElements()) {
  75.         var matches = false;
  76.         var style = new GoogleRedesignedStyle(resourceEnumerator.getNext());
  77.         me.push(style);
  78.         var targetEnumerator = style.siteURLs;
  79.         while (!matches && targetEnumerator.hasMoreElements()) {
  80.             var siteURL = targetEnumerator.getNext().getValue();
  81.             if (this.cleanURI(content.document.location.href) == this.cleanURI(siteURL)) {
  82.                 applicableStyles.push(style);
  83.                 matches = true;
  84.             }
  85.         }
  86.         targetEnumerator = style.siteURLPrefixes;
  87.         while (!matches && targetEnumerator.hasMoreElements()) {
  88.             var siteURLPrefix = targetEnumerator.getNext().getValue();
  89.             if (content.document.location.href.indexOf(siteURLPrefix) == 0) {
  90.                 applicableStyles.push(style);
  91.                 matches = true;
  92.             }
  93.         }
  94.         var domain = content.document.domain;
  95.         if (domain) {
  96.             targetEnumerator = style.domains;
  97.             while (!matches && targetEnumerator.hasMoreElements()) {
  98.                 var siteDomain = targetEnumerator.getNext().getValue();
  99.                 if (siteDomain == domain) {
  100.                     applicableStyles.push(style);
  101.                     matches = true;
  102.                 } else {
  103.                     var subdomain = "." + siteDomain;
  104.                     var domainPosition = domain.indexOf(subdomain);
  105.                     if (domainPosition > -1 &&
  106.                         domainPosition == domain.length - subdomain.length) {
  107.                         applicableStyles.push(style);
  108.                         matches = true;
  109.                     }
  110.                 }
  111.             }
  112.         }
  113.     }
  114.     return applicableStyles;
  115. },
  116. getCodeFromPage:function (doc) {
  117.     var codeTextNodes = doc.getElementById("googleredesigned-code").childNodes;
  118.     var code = "";
  119.     for (var i = 0; i < codeTextNodes.length; i++) {
  120.         code += codeTextNodes[i].nodeValue;
  121.     }
  122.     return code;
  123. },
  124. getConfigUri:function () {
  125.     var file = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);
  126.     file.append("extensions");
  127.     file.append("{cc85cd4e-5a5b-4eda-a25c-bdaffa93b406}");
  128.     file.append("chrome");
  129.     file.append("content");
  130.     file.append("config.rdf");
  131.     var ioService = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService);
  132.     if (!file.exists()) {
  133.         var scriptableStream = Components.classes['@mozilla.org/scriptableinputstream;1'].getService(Components.interfaces.nsIScriptableInputStream);
  134.         var channel = ioService.newChannel("chrome://googleredesigned/content/config-default.rdf", null, null);
  135.         var input = channel.open();
  136.         scriptableStream.init(input);
  137.         var data = scriptableStream.read(input.available());
  138.         scriptableStream.close();
  139.         input.close();
  140.         var foStream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
  141.         foStream.init(file, 2 | 8 | 32, 436, 0);
  142.         foStream.write(data, data.length);
  143.         foStream.close();
  144.     }
  145.     return ioService.newFileURI(file).spec;
  146. },
  147. getContainedDocuments:function (docShell) {
  148.     var docs = [];
  149.     var containedDocShells = docShell.getDocShellEnumerator(Components.interfaces.nsIDocShellTreeItem.typeAll, Components.interfaces.nsIDocShell.ENUMERATE_FORWARDS);
  150.     while (containedDocShells.hasMoreElements()) {
  151.         try {
  152.             var doc = containedDocShells.getNext().QueryInterface(Components.interfaces.nsIDocShell).contentViewer.DOMDocument;
  153.             docs.push(doc);
  154.         } catch (ex) {
  155.             dump(ex);
  156.         }
  157.     }
  158.     return docs;
  159. },
  160. getDomainList:function (domain, array) {
  161.     if (Components.interfaces.nsIEffectiveTLDService) {
  162.         var tld = Components.classes['@mozilla.org/network/effective-tld-service;1'].getService(Components.interfaces.nsIEffectiveTLDService);
  163.         if (Components.ID("{b07cb0f0-3394-572e-6260-dbaed0a292ba}").equals(Components.interfaces.nsIStyleSheetService)) {
  164.             if (domain.length <= tld.getEffectiveTLDLength(domain)) {
  165.                 return;
  166.             }
  167.         } else {
  168.             if (domain == tld.getPublicSuffixFromHost(domain)) {
  169.                 return;
  170.             }
  171.         }
  172.     }
  173.     array[array.length] = domain;
  174.     var firstDot = domain.indexOf(".");
  175.     var lastDot = domain.lastIndexOf(".");
  176.     if (firstDot != lastDot) {
  177.         if (!isNaN(parseInt(domain.substring(lastDot + 1, domain.length)))) {
  178.             return;
  179.         }
  180.         googleredesignedBrowserOverlay.getDomainList(domain.substring(firstDot + 1, domain.length), array);
  181.     }
  182. },
  183. getDomainMenuItem:function (domain) {
  184.     var addSite = document.createElementNS(googleredesignedCommon.XULNS, "menuitem");
  185.     addSite.setAttribute("label", googleredesignedBrowserOverlay.STRINGS.getFormattedString("writeForDomain", [domain]));
  186.     addSite.setAttribute("oncommand", "googleredesignedCommon.addDomain(\"" + domain + "\")");
  187.     return addSite;
  188. },
  189. getGlobalStyles:function () {
  190.     var globalStyles = [];
  191.     var resourceEnumerator = GoogleRedesignedStyle.prototype.ds.getNode(GoogleRedesignedStyle.prototype.containerURI).getChildren();
  192.     var applicableStyles = [];
  193.     while (resourceEnumerator.hasMoreElements()) {
  194.         var style = new GoogleRedesignedStyle(resourceEnumerator.getNext());
  195.         if (style.global &&
  196.             style.appliesToNamespace(googleredesignedCommon.HTMLNS)) {
  197.             globalStyles.push(style);
  198.         }
  199.     }
  200.     return globalStyles;
  201. },
  202. getStyleByURI:function (uri) {
  203.     var style = null;
  204.     var enumerator = GoogleRedesignedStyle.prototype.ds.getAllResources();
  205.     while (enumerator.hasMoreElements()) {
  206.         var node = enumerator.getNext();
  207.         style = new GoogleRedesignedStyle(node);
  208.         if (style.uri == uri) {
  209.             return style;
  210.         }
  211.     }
  212.     return null;
  213. },
  214. grFirstRun:function () {
  215.     gBrowser.removeEventListener("load", googleredesignedBrowserOverlay.grFirstRun, true);
  216.     var grprefsinstance = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
  217.     var grinstalled = grprefsinstance.getBoolPref("extensions.googleredesigned.installed");
  218.     var grUrl;
  219.     if (!grinstalled) {
  220.         grprefsinstance.setBoolPref("extensions.googleredesigned.installed", true);
  221.         grUrl = "http://www.globexdesigns.com/gr/?page=welcome";
  222.         gBrowser.selectedTab = gBrowser.addTab(grUrl);
  223.     } else {
  224.         grUrl = "http://www.globexdesigns.com/gr/?page=changelog";
  225.         gBrowser.selectedTab = gBrowser.addTab(grUrl);
  226.     }
  227. },
  228. handleStyleMenuItemClick:function (event, style) {
  229.     if (event.button == 2) {
  230.         googleredesignedCommon.openEdit(style);
  231.         var element = event.target;
  232.         while (element) {
  233.             if (element.nodeName == "menupopup") {
  234.                 element.hidePopup();
  235.             }
  236.             element = element.parentNode;
  237.         }
  238.         event.stopPropagation();
  239.     }
  240. },
  241. init:function () {
  242.     googleredesignedBrowserOverlay.STRINGS = document.getElementById("googleredesigned-strings");
  243.     googleredesignedBrowserOverlay.URL_STRINGS = document.getElementById("googleredesigned-url-strings");
  244.     var appcontent = document.getElementById("appcontent");
  245.     if (!appcontent) {
  246.         appcontent = document.getElementById("frame_main_pane");
  247.     }
  248.     if (appcontent) {
  249.         appcontent.addEventListener("DOMContentLoaded", googleredesignedBrowserOverlay.onPageLoad, true);
  250.     }
  251.     
  252.     
  253.     if(document.getElementById("gmailredesigned")){
  254.     document.getElementById("gmailredesigned").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  255.     //document.getElementById("gmailredesigned").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  256.     document.getElementById("gmailvsour").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/gmail/gmail_dev.css');},false);
  257.     document.getElementById("gmailclog").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/?page=changelogs&css=gmail');},false);
  258.     document.getElementById("gmailsrep").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=2');},false);
  259.     document.getElementById("gcalredesigned").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  260.     //document.getElementById("gcalredesigned").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  261.     document.getElementById("gcalvsour").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/gcal/gcal_dev.css');},false);
  262.     document.getElementById("gcalclog").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/?page=changelogs&css=gcal');},false);
  263.     document.getElementById("gcalsrep").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=3');},false);
  264.     document.getElementById("greaderredesigned").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  265.     //document.getElementById("greaderredesigned").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  266.     document.getElementById("greadervsour").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/greader/greader_dev.css');},false);
  267.     document.getElementById("greaderclog").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/?page=changelogs&css=greader');},false);
  268.     document.getElementById("greadersrep").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=4');},false);
  269.     document.getElementById("gdocsredesigned").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  270.     //document.getElementById("gdocsredesigned").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  271.     document.getElementById("gdocsvsour").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/gdocs/gdocs_dev.css');},false);
  272.     document.getElementById("gdocsclog").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/?page=changelogs&css=gdocs');},false);
  273.     document.getElementById("gdocssrep").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=5');},false);
  274.     document.getElementById("gr-unlock").addEventListener("command",function(event){openDialog('chrome://googleredesigned/content/unlock.xul',"googleredesignedUnlock"+Math.random(),"chrome,close=yes,centerscreen,modal");},false);
  275.     document.getElementById("grupdateitem").addEventListener("command",function(event){GoogleRedesignedUpdateManager.googleredesignedupdate('manual')},false);    
  276.     }
  277.     
  278.     if(document.getElementById("gmailredesigned-tools")){
  279.     document.getElementById("gmailredesigned-tools").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  280.     //document.getElementById("gmailredesigned-tools").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  281.     document.getElementById("gmailvsour-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/gmail/gmail_dev.css');},false);
  282.     document.getElementById("gmailclog-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/?page=changelogs&css=gmail');},false);
  283.     document.getElementById("gmailsrep-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=2');},false);
  284.     document.getElementById("gcalredesigned-tools").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  285.     //document.getElementById("gcalredesigned-tools").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  286.     document.getElementById("gcalvsour-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/gcal/gcal_dev.css');},false);
  287.     document.getElementById("gcalclog-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/?page=changelogs&css=gcal');},false);
  288.     document.getElementById("gcalsrep-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=3');},false);
  289.     document.getElementById("greaderredesigned-tools").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  290.     //document.getElementById("greaderredesigned-tools").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  291.     document.getElementById("greadervsour-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/greader/greader_dev.css');},false);
  292.     document.getElementById("greaderclog-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/?page=changelogs&css=greader');},false);
  293.     document.getElementById("greadersrep-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=4');},false);
  294.     document.getElementById("gdocsredesigned-tools").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  295.     //document.getElementById("gdocsredesigned-tools").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  296.     document.getElementById("gdocsvsour-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/gdocs/gdocs_dev.css');},false);
  297.     document.getElementById("gdocsclog-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/products/gr/?page=changelogs&css=gdocs');},false);
  298.     document.getElementById("gdocssrep-tools").addEventListener("command",function(event){gBrowser.selectedTab = gBrowser.addTab('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=5');},false);
  299.     document.getElementById("gr-unlock-tools").addEventListener("command",function(event){openDialog('chrome://googleredesigned/content/unlock.xul',"googleredesignedUnlock"+Math.random(),"chrome,close=yes,centerscreen,modal");},false);
  300.      document.getElementById("grupdateitem-tools").addEventListener("command",function(event){GoogleRedesignedUpdateManager.googleredesignedupdate('manual')},false);    
  301.     }
  302.     
  303.     if(document.getElementById("gmailredesigned-prism")){
  304.     document.getElementById("gmailredesigned-prism").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  305.     //document.getElementById("gmailredesigned-prism").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  306.     document.getElementById("gmailvsour-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/products/gr/gmail/gmail_dev.css', null, null);},false);
  307.     document.getElementById("gmailclog-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/products/gr/?page=changelogs&css=gmail', null, null);},false);
  308.     document.getElementById("gmailsrep-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=2', null, null);},false);
  309.     document.getElementById("gcalredesigned-prism").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  310.     //document.getElementById("gcalredesigned-prism").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  311.     document.getElementById("gcalvsour-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/products/gr/gcal/gcal_dev.css', null, null);},false);
  312.     document.getElementById("gcalclog-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/products/gr/?page=changelogs&css=gcal', null, null);},false);
  313.     document.getElementById("gcalsrep-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=3', null, null);},false);
  314.     document.getElementById("greaderredesigned-prism").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  315.     //document.getElementById("greaderredesigned-prism").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  316.     document.getElementById("greadervsour-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/products/gr/greader/greader_dev.css', null, null);},false);
  317.     document.getElementById("greaderclog-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/products/gr/?page=changelogs&css=greader', null, null);},false);
  318.     document.getElementById("greadersrep-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=4', null, null);},false);
  319.     document.getElementById("gdocsredesigned-prism").addEventListener("command",function(event){googleredesignedBrowserOverlay.styleMenuItemCommand(event, this.googleredesignedStyle)},false);
  320.     //document.getElementById("gdocsredesigned-prism").addEventListener("click",function(event){googleredesignedBrowserOverlay.handleStyleMenuItemClick(event, this.googleredesignedStyle)},false);
  321.     document.getElementById("gdocsvsour-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/products/gr/gdocs/gdocs_dev.css', null, null);},false);
  322.     document.getElementById("gdocsclog-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/products/gr/?page=changelogs&css=gdocs', null, null);},false);
  323.     document.getElementById("gdocssrep-prism").addEventListener("command",function(event){document.getElementById("browser_content").loadURI('http://www.globexdesigns.com/forums/index.php?autocom=tracker&showproject=5', null, null);},false);
  324.     document.getElementById("gr-unlock-prism").addEventListener("command",function(event){openDialog('chrome://googleredesigned/content/unlock.xul',"googleredesignedUnlock"+Math.random(),"chrome,close=yes,centerscreen,modal");},false);
  325.      document.getElementById("grupdateitem-prism").addEventListener("command",function(event){GoogleRedesignedUpdateManager.googleredesignedupdate('manual')},false);    
  326.   }
  327.   
  328.   if (googleredesignedBrowserOverlay.autoupdateassignedcheck() == "false") {
  329.         var dsp = new GoogleRedesignedRDFDataSource(googleredesignedBrowserOverlay.getConfigUri());
  330.         var te = dsp.getNode("urn:googleredesigned:extension").getChildren();
  331.         while (te.hasMoreElements()) {
  332.             var extensionautoupdateassignednode = te.getNext();
  333.         }
  334.         extensionautoupdateassignednode.modifyTarget("urn:googleredesigned#autoupdateassigned", "false", "true");
  335.         dsp.save();
  336.         //window.setTimeout(function(){GoogleRedesignedUpdateManager.googleredesignedupdate("automate")},120000);
  337.     }
  338.     googleredesignedBrowserOverlay.instalandupdatecheck();
  339. },
  340. instalandupdatecheck:function () {
  341.     var grprefsinstance = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
  342.     var grversion = grprefsinstance.getCharPref("extensions.googleredesigned.currentversion");
  343.     var gretensionmanagerinstance = Components.classes['@mozilla.org/extensions/manager;1'].getService(Components.interfaces.nsIExtensionManager);
  344.     var grextension = gretensionmanagerinstance.getItemForID("{cc85cd4e-5a5b-4eda-a25c-bdaffa93b406}");
  345.     var grnewversion = grextension.version;
  346.     if (grversion != grnewversion) {
  347.         grprefsinstance.setCharPref("extensions.googleredesigned.currentversion", grnewversion);
  348.         if(gBrowser) gBrowser.addEventListener("load", googleredesignedBrowserOverlay.grFirstRun, true);
  349.     }
  350. },
  351. installFromSite:function (event) {
  352.     var doc;
  353.     if (event.target.nodeName == "#document") {
  354.         doc = event.target;
  355.     }
  356.     var uri = googleredesignedBrowserOverlay.cleanURI(doc.location.href);
  357.     var links = doc.getElementsByTagName("link");
  358.     var code = null;
  359.     var description = null;
  360.     var updateURL = null;
  361.     var installPingURL = null;
  362.     var triggeringDocument = null;
  363.     for (i in links) {
  364.         switch (links[i].rel) {
  365.           case "googleredesigned-code":
  366.             var id = links[i].getAttribute("href").replace("#", "");
  367.             var element = doc.getElementById(id);
  368.             if (element) {
  369.                 code = element.textContent;
  370.             }
  371.             break;
  372.           case "googleredesigned-description":
  373.             var id = links[i].getAttribute("href").replace("#", "");
  374.             var element = doc.getElementById(id);
  375.             if (element) {
  376.                 description = element.textContent;
  377.             }
  378.             break;
  379.           case "googleredesigned-install-ping-url":
  380.             installPingURL = links[i].href;
  381.             break;
  382.           case "googleredesigned-update-url":
  383.             updateURL = links[i].href;
  384.             break;
  385.           default:;
  386.         }
  387.     }
  388.     openDialog("chrome://googleredesigned/content/edit.xul", "googleredesignedEdit" + Math.random(), googleredesignedCommon.editDialogOptions, {uri: uri, description: description, code: code, updateURL: updateURL, installPingURL: installPingURL, triggeringDocument: doc});
  389. },
  390. isAllowedToInstall:function (doc) {
  391.     try {
  392.         var domain = doc.domain;
  393.     } catch (ex) {
  394.         return false;
  395.     }
  396.     if (!domain) {
  397.         return false;
  398.     }
  399.     var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefService);
  400.     prefs = prefs.getBranch("extensions.googleredesigned.install.");
  401.     var allowedDomains = prefs.getCharPref("allowedDomains").split(" ");
  402.     if (allowedDomains.indexOf(doc.domain) > -1) {
  403.         return true;
  404.     }
  405.     for (var i = 0; i < allowedDomains.length; i++) {
  406.         var subdomain = "." + allowedDomains[i];
  407.         var subdomainIndex = doc.domain.lastIndexOf(subdomain);
  408.         if (subdomainIndex > -1 &&
  409.             subdomainIndex == doc.domain.length - subdomain.length) {
  410.             return true;
  411.         }
  412.     }
  413.     return false;
  414. },
  415. mainPopupShowing:function (event) {
  416.     var popup = event.target;
  417.     switch (this.MAIN_POPUPS.indexOf(popup.id)) {
  418.       case -1:
  419.         return;
  420.       case 0:
  421.         break;
  422.       default:
  423.         var primary = document.getElementById(this.MAIN_POPUPS[0]);
  424.         for (var i = 0; i < primary.childNodes.length; i++) {
  425.             popup.appendChild(primary.childNodes[i].cloneNode(true));
  426.         }
  427.     }
  428.     document.getElementById("googleredesigned-add-file").style.display = (content.document.contentType == "text/css") ? "-moz-box" : "none";
  429.     var applicableStyles = googleredesignedBrowserOverlay.getApplicableStyles();
  430.     if (applicableStyles.length > 0) {
  431.         googleredesignedBrowserOverlay.appendStyleMenuItems(popup, applicableStyles);
  432.     }
  433. },
  434. onPageLoad:function (event) {
  435.     if (event.originalTarget.nodeName == "#document" &&
  436.         googleredesignedBrowserOverlay.isAllowedToInstall(event.originalTarget)) {
  437.         var doc = event.originalTarget;
  438.         var uri = googleredesignedBrowserOverlay.cleanURI(doc.location.href);
  439.         var style = googleredesignedBrowserOverlay.getStyleByURI(uri);
  440.         if (style == null) {
  441.             googleredesignedCommon.dispatchEvent(doc, "styleCanBeInstalled");
  442.             doc.addEventListener("googleredesignedInstall", googleredesignedBrowserOverlay.installFromSite, false);
  443.         } else {
  444.             var code = googleredesignedBrowserOverlay.getCodeFromPage(doc);
  445.             if (code) {
  446.                 googleredesignedBrowserOverlay.checkUpdateEvent(doc, style);
  447.             } else {
  448.                 doc.addEventListener("googleredesignedCodeLoaded", function () {googleredesignedBrowserOverlay.checkUpdateEvent(doc, style);}, false);
  449.                 googleredesignedCommon.dispatchEvent(doc, "styleLoadCode");
  450.             }
  451.         }
  452.         doc.addEventListener("postFromGoogleRedesigned", googleredesignedBrowserOverlay.provideStyleInfo, false);
  453.         doc.addEventListener("postedFromGoogleRedesigned", googleredesignedBrowserOverlay.updateStyleURI, false);
  454.     }
  455. },
  456. openSidebar:function () {
  457.     toggleSidebar("viewGoogleRedesignedSidebar");
  458. },
  459. pageStyleMenu:null,
  460. pageStylePopupHiding:function (event) {
  461.     var popup = event.target;
  462.     if (popup != pageStyleMenu) {
  463.         return;
  464.     }
  465.     var separator = document.getElementById("googleredesignedPageStyleSeparator");
  466.     while (separator.nextSibling) {
  467.         separator.parentNode.removeChild(separator.nextSibling);
  468.     }
  469.     separator.parentNode.removeChild(separator);
  470. },
  471. pageStylePopupShowing:function (event) {
  472.     var popup = event.target;
  473.     if (popup != pageStyleMenu.firstChild) {
  474.         return;
  475.     }
  476.     var separator = document.createElementNS(googleredesignedCommon.XULNS, "menuseparator");
  477.     separator.id = "googleredesignedPageStyleSeparator";
  478.     popup.appendChild(separator);
  479.     popup.appendChild(document.getElementById("googleredesigned-global-styles").cloneNode(true));
  480.     var applicableStyles = googleredesignedBrowserOverlay.getApplicableStyles();
  481.     if (applicableStyles.length > 0) {
  482.         googleredesignedBrowserOverlay.appendStyleMenuItems(popup, applicableStyles);
  483.     }
  484. },
  485. popupshowingedited:function (event) {
  486.     if (this.updateinprogresscheck() == "true") {
  487.         document.getElementById("googleredesigned-status-popup").hidePopup();
  488.         event.preventDefault();
  489.     } else {
  490.         var resourceEnumerator = GoogleRedesignedStyle.prototype.ds.getNode(GoogleRedesignedStyle.prototype.containerURI).getChildren();
  491.         var stylearray = [];
  492.         while (resourceEnumerator.hasMoreElements()) {
  493.             var style = new GoogleRedesignedStyle(resourceEnumerator.getNext());
  494.             stylearray.push(style);
  495.         }
  496.         var firststyle = stylearray[0];
  497.         var secondstyle = stylearray[1];
  498.         var thirdstyle = stylearray[2];
  499.         var fourthstyle = stylearray[3];
  500.         document.getElementById("gmailredesigned").googleredesignedStyle = firststyle;
  501.         document.getElementById("gmailredesigned").setAttribute("label", firststyle.description + " v" + firststyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  502.         document.getElementById("gmailredesigned").setAttribute("checked", firststyle.enabled);
  503.         document.getElementById("gcalredesigned").googleredesignedStyle = secondstyle;
  504.         document.getElementById("gcalredesigned").setAttribute("label", secondstyle.description + " v" + secondstyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  505.         document.getElementById("gcalredesigned").setAttribute("checked", secondstyle.enabled);
  506.         document.getElementById("greaderredesigned").googleredesignedStyle = thirdstyle;
  507.         document.getElementById("greaderredesigned").setAttribute("label", thirdstyle.description + " v" + thirdstyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  508.         document.getElementById("greaderredesigned").setAttribute("checked", thirdstyle.enabled);
  509.          if(!fourthstyle.neverUpdate){
  510.             document.getElementById("gdocsredesigned").googleredesignedStyle = fourthstyle;
  511.             document.getElementById("gdocsredesigned").setAttribute("label", fourthstyle.description + " v" + fourthstyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  512.             document.getElementById("gdocsredesigned").setAttribute("checked", fourthstyle.enabled);
  513.             document.getElementById("gdocsredesigned").parentNode.parentNode.hidden=false;
  514.             document.getElementById("gr-unlock").hidden=true;
  515.         }
  516.         else{document.getElementById("gdocsredesigned").parentNode.parentNode.hidden=true;}
  517.     }
  518. },
  519. popupshowingeditedtools:function (event) {
  520.     if (this.updateinprogresscheck() == "true") {
  521.         document.getElementById("googleredesigned-tools-popup").hidePopup();
  522.         event.preventDefault();
  523.     } else {
  524.         var resourceEnumerator = GoogleRedesignedStyle.prototype.ds.getNode(GoogleRedesignedStyle.prototype.containerURI).getChildren();
  525.         var stylearray = [];
  526.         while (resourceEnumerator.hasMoreElements()) {
  527.             var style = new GoogleRedesignedStyle(resourceEnumerator.getNext());
  528.             stylearray.push(style);
  529.         }
  530.         var firststyle = stylearray[0];
  531.         var secondstyle = stylearray[1];
  532.         var thirdstyle = stylearray[2];
  533.         var fourthstyle = stylearray[3];
  534.         document.getElementById("gmailredesigned-tools").googleredesignedStyle = firststyle;
  535.         document.getElementById("gmailredesigned-tools").setAttribute("label", firststyle.description + " v" + firststyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  536.         document.getElementById("gmailredesigned-tools").setAttribute("checked", firststyle.enabled);
  537.         document.getElementById("gcalredesigned-tools").googleredesignedStyle = secondstyle;
  538.         document.getElementById("gcalredesigned-tools").setAttribute("label", secondstyle.description + " v" + secondstyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  539.         document.getElementById("gcalredesigned-tools").setAttribute("checked", secondstyle.enabled);
  540.         document.getElementById("greaderredesigned-tools").googleredesignedStyle = thirdstyle;
  541.         document.getElementById("greaderredesigned-tools").setAttribute("label", thirdstyle.description + " v" + thirdstyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  542.         document.getElementById("greaderredesigned-tools").setAttribute("checked", thirdstyle.enabled);
  543.         if(!fourthstyle.neverUpdate){
  544.             document.getElementById("gdocsredesigned-tools").googleredesignedStyle = fourthstyle;
  545.             document.getElementById("gdocsredesigned-tools").setAttribute("label", fourthstyle.description + " v" + fourthstyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  546.             document.getElementById("gdocsredesigned-tools").setAttribute("checked", fourthstyle.enabled);
  547.             document.getElementById("gdocsredesigned-tools").parentNode.parentNode.hidden=false;
  548.             document.getElementById("gr-unlock-tools").hidden=true;
  549.         }
  550.         else{document.getElementById("gdocsredesigned-tools").parentNode.parentNode.hidden=true;}
  551.     }
  552. },
  553. popupshowingeditedprism:function (event) {
  554.     if (this.updateinprogresscheck() == "true") {
  555.         document.getElementById("googleredesigned-prism-popup").hidePopup();
  556.         event.preventDefault();
  557.     } else {
  558.         var resourceEnumerator = GoogleRedesignedStyle.prototype.ds.getNode(GoogleRedesignedStyle.prototype.containerURI).getChildren();
  559.         var stylearray = [];
  560.         while (resourceEnumerator.hasMoreElements()) {
  561.             var style = new GoogleRedesignedStyle(resourceEnumerator.getNext());
  562.             stylearray.push(style);
  563.         }
  564.         var firststyle = stylearray[0];
  565.         var secondstyle = stylearray[1];
  566.         var thirdstyle = stylearray[2];
  567.         var fourthstyle = stylearray[3];
  568.         document.getElementById("gmailredesigned-prism").googleredesignedStyle = firststyle;
  569.         document.getElementById("gmailredesigned-prism").setAttribute("label", firststyle.description + " v" + firststyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  570.         document.getElementById("gmailredesigned-prism").setAttribute("checked", firststyle.enabled);
  571.         document.getElementById("gcalredesigned-prism").googleredesignedStyle = secondstyle;
  572.         document.getElementById("gcalredesigned-prism").setAttribute("label", secondstyle.description + " v" + secondstyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  573.         document.getElementById("gcalredesigned-prism").setAttribute("checked", secondstyle.enabled);
  574.         document.getElementById("greaderredesigned-prism").googleredesignedStyle = thirdstyle;
  575.         document.getElementById("greaderredesigned-prism").setAttribute("label", thirdstyle.description + " v" + thirdstyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  576.         document.getElementById("greaderredesigned-prism").setAttribute("checked", thirdstyle.enabled);
  577.         if(!fourthstyle.neverUpdate){
  578.             document.getElementById("gdocsredesigned-prism").googleredesignedStyle = fourthstyle;
  579.             document.getElementById("gdocsredesigned-prism").setAttribute("label", fourthstyle.description + " v" + fourthstyle.code.split(" Embedded")[0].split("Version")[1].split(": ")[1]);
  580.             document.getElementById("gdocsredesigned-prism").setAttribute("checked", fourthstyle.enabled);
  581.             document.getElementById("gdocsredesigned-prism").parentNode.parentNode.hidden=false;
  582.             document.getElementById("gr-unlock-prism").hidden=true;
  583.         }
  584.         else{document.getElementById("gdocsredesigned-prism").parentNode.parentNode.hidden=true;}
  585.     }
  586. },
  587. provideStyleInfo:function (event) {
  588.     var doc = event.target;
  589.     var style = new GoogleRedesignedStyle(doc.getElementById("googleredesigned-uri").value);
  590.     if (style.code) {
  591.         var data = {code: style.code, shortDescription: style.description};
  592.         doc.getElementById("googleredesigned-info").value = data.toSource();
  593.         var googleredesignedEvent = doc.createEvent("Events");
  594.         googleredesignedEvent.initEvent("postFromGoogleRedesignedReturn", false, false, doc.defaultView, null);
  595.         doc.dispatchEvent(googleredesignedEvent);
  596.     } else {
  597.         GoogleRedesignedStyle.prototype.ds.deleteRecursive(style.node);
  598.     }
  599. },
  600. showGlobalStyles:function (event) {
  601.     var popup = event.target;
  602.     var globalStyles = googleredesignedBrowserOverlay.getGlobalStyles();
  603.     if (globalStyles.length == 0) {
  604.         var noneMenuItem = document.createElementNS(googleredesignedCommon.XULNS, "menuitem");
  605.         noneMenuItem.setAttribute("label", googleredesignedBrowserOverlay.STRINGS.getString("noGlobalStyles"));
  606.         noneMenuItem.setAttribute("disabled", "true");
  607.         noneMenuItem.className = "no-style-menu-item";
  608.         popup.appendChild(noneMenuItem);
  609.     } else {
  610.         googleredesignedBrowserOverlay.appendStyleMenuItems(popup, globalStyles);
  611.     }
  612.     event.stopPropagation();
  613. },
  614. styleGDocsUnlock:function () {
  615.     var resourceEnumerator = GoogleRedesignedStyle.prototype.ds.getNode(GoogleRedesignedStyle.prototype.containerURI).getChildren();
  616.     var stylearray = [];
  617.     while (resourceEnumerator.hasMoreElements()) {
  618.         var style = new GoogleRedesignedStyle(resourceEnumerator.getNext());
  619.         stylearray.push(style);
  620.     }
  621.     var style = stylearray[3];
  622.     style.enabled = true;
  623.     style.neverUpdate= false;
  624.     GoogleRedesignedStyle.prototype.ds.save();
  625.     googleredesignedCommon.reloadManage();
  626. },
  627. styleMenuItemCommand:function (event, style) {
  628.     style.enabled = !style.enabled;
  629.     GoogleRedesignedStyle.prototype.ds.save();
  630.     googleredesignedCommon.reloadManage();
  631.     event.stopPropagation();
  632. },
  633. updateFromSite:function (event) {
  634.     var doc = event.target;
  635.     var uri = googleredesignedBrowserOverlay.cleanURI(doc.location.href);
  636.     var enumerator = GoogleRedesignedStyle.prototype.ds.getAllResources();
  637.     var style = null;
  638.     var found = false;
  639.     while (enumerator.hasMoreElements()) {
  640.         style = new GoogleRedesignedStyle(enumerator.getNext());
  641.         if (style.uri == uri) {
  642.             found = true;
  643.             break;
  644.         }
  645.     }
  646.     if (!found) {
  647.         return;
  648.     }
  649.     var windowName = "googleredesignedEdit" + style.uri.replace(/\W/g, "");
  650.     var links = doc.getElementsByTagName("link");
  651.     var code = null;
  652.     for (i in links) {
  653.         switch (links[i].rel) {
  654.           case "googleredesigned-code":
  655.             var id = links[i].getAttribute("href").replace("#", "");
  656.             var element = doc.getElementById(id);
  657.             if (element) {
  658.                 code = element.textContent;
  659.             }
  660.             break;
  661.           default:;
  662.         }
  663.     }
  664.     openDialog("chrome://googleredesigned/content/edit.xul", windowName, googleredesignedCommon.editDialogOptions, {uri: style.uri, code: code, windowtype: windowName, triggeringDocument: doc});
  665. },
  666. updateStyleURI:function (event) {
  667.     var doc = event.target;
  668.     var oldStyle = new GoogleRedesignedStyle(doc.getElementById("old-uri").value);
  669.     var newStyle = new GoogleRedesignedStyle(doc.getElementById("new-uri").value);
  670.     oldStyle.copy(newStyle);
  671.     GoogleRedesignedStyle.prototype.ds.deleteRecursive(oldStyle.node);
  672.     newStyle.updateURL = doc.getElementById("new-update-uri").value;
  673.     newStyle.save();
  674.     googleredesignedCommon.reloadManage();
  675. },
  676. updateinprogresscheck:function () {
  677.     var ds = new GoogleRedesignedRDFDataSource(googleredesignedBrowserOverlay.getConfigUri());
  678.     var te = ds.getNode("urn:googleredesigned:extension").getChildren();
  679.     while (te.hasMoreElements()) {
  680.         var extensionupdatingnode = te.getNext();
  681.     }
  682.     return extensionupdatingnode.getTarget("urn:googleredesigned#updating").getValue();
  683. },
  684. writeStylePopupShowing:function (event) {
  685.     var popup = event.target;
  686.     var addSite = document.createElementNS(googleredesignedCommon.XULNS, "menuitem");
  687.     addSite.setAttribute("label", googleredesignedBrowserOverlay.STRINGS.getString("writeForSite"));
  688.     addSite.setAttribute("accesskey", googleredesignedBrowserOverlay.STRINGS.getString("writeForSiteAccesskey"));
  689.     addSite.setAttribute("oncommand", "googleredesignedBrowserOverlay.addSite()");
  690.     popup.appendChild(addSite);
  691.     if (content.document.domain) {
  692.         var domains = [];
  693.         googleredesignedBrowserOverlay.getDomainList(content.document.domain, domains);
  694.         for (var i = 0; i < domains.length; i++) {
  695.             popup.appendChild(googleredesignedBrowserOverlay.getDomainMenuItem(domains[i]));
  696.         }
  697.     }
  698.     addSite = document.createElementNS(googleredesignedCommon.XULNS, "menuitem");
  699.     addSite.setAttribute("label", googleredesignedBrowserOverlay.STRINGS.getString("writeBlank"));
  700.     addSite.setAttribute("accesskey", googleredesignedBrowserOverlay.STRINGS.getString("writeBlankAccesskey"));
  701.     addSite.setAttribute("oncommand", "googleredesignedCommonOverlay.addBlank()");
  702.     popup.appendChild(addSite);
  703. }
  704. }
  705. addEventListener("load", googleredesignedBrowserOverlay.init, false);
  706.